#pragma once
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdint.h>
//   hashmap_t *map = hashmap_create(1024);
//   hashmap_put(map, "key1", (void*)value1);
//   void *val = hashmap_get(map, "key1");
//   hashmap_remove(map, "key1");
//   hashmap_destroy(map);

typedef struct hashmap_entry{
    char *key;
    int int_key;
    void *value; // 存储的值（通用指针，可指向任何类型）
    struct hashmap_entry *next;
}hashmap_entry_t;

typedef struct{
    size_t bucket_count;
    hashmap_entry_t **buckets;
}hashmap_t;

// 创建一个新的哈希表，指定桶的数量
extern hashmap_t *hashmap_create(size_t bucket_count);

// 插入或更新键值对（字符串键）
extern int hashmap_put(hashmap_t *map, const char *key, void *value);

// 通过字符串键获取值，未找到则返回NULL
extern void *hashmap_get(hashmap_t *map, const char *key);

// 通过字符串键删除条目，成功返回0，未找到返回-1
extern int hashmap_remove(hashmap_t *map, const char *key);

// 销毁哈希表，释放所有内存
extern void hashmap_destroy(hashmap_t *map);

// 通过整数键获取值
extern void *hashmap_get_int(hashmap_t *map, int key);

// 插入或更新键值对（整数键）
extern int hashmap_put_int(hashmap_t *map, int key, void *value);

// 通过整数键删除条目
extern int hashmap_remove_int(hashmap_t *map, int key);